#ifndef _API_SYS_H_
#define _API_SYS_H_

#define IRQ_TMR1_VECTOR                 4
#define IRQ_TMR245_VECTOR               5
#define IRQ_IRRX_VECTOR                 6
#define IRQ_UART_VECTOR                 14
#define IRQ_HUART_VECTOR                15
#define IRQ_SPI_VECTOR                 	20


typedef void (*isr_t)(void);

extern u16 tmr5ms_cnt;

void sys_set_tmr_enable(bool tmr5ms_en, bool tmr1ms_en);
u32 sys_get_rand_key(void);

void xosc_init(void);

bool sys_irq_init(int vector, int pr, isr_t isr);           //初始化一个中断, pr为优先级


//GPIO输出时钟   type: 0 -> xosc26m, 1 -> x26m_13m, 2 -> x26m_32k, 3 -> osc32k, 4 -> 12m, 5 -> 24m
//mapping: {CLKOMAP_PA5, CLKOMAP_PA6, CLKOMAP_PB0, CLKOMAP_PB1, CLKOMAP_PE5, CLKOMAP_PE6}
//输出osc32k时钟需要外挂32K晶振且使能EXT_32K_EN
void sys_clk_output(u32 type, u32 mapping);

u16 get_random(u16 num);                                    //获取[0, num-1]之间的随机数

void set_uart0_baud(u32 baud);                              //设置uart0波特率, 默认是15000000

u16 convert_uni2gbk(u16 code, u32 addr, u32 len);           //输入utf16, 返回gbk编码, 找不到编码，使用'□'
u8 utf8_char_size(u8 code);                                 //返回UTF8占用几字节
u16 utf8_convert_to_unicode(u8 *in, u8 char_size);          //UTF-8转成UTF-16 LE编码

u8 unicode_convert_to_win1251(u16 code);                    //Unicode转成Windows1251编码
u16 unicode_convert_to_euckr(u16 code , u32 addr);           //unicode韩文部分转EUC-KR

u8 *md5_cal(u8 *buf, u16 len);                              //计算字符串的MD5，返回16Byte MD5值

u8 get_spdif_sta(void);  //0 暂停  //1 播放
u8 param_bt_xosc_read_api(void);
void sco_far_dnr_level_init(u8 level);

//head_buf:   dump模块需要的包头管理buf,长度为 file_total*14
//file_toal:  dump模块同时支持导出的文件个数. 目前PC端软件UartDump暂时只支持最多同时接收6路并保存.
//putbuf:     底层dump函数,这里一般为高速串口DMA发送函数
//wait:       dump等待函数,下一次dump_putbuf时,需要等待上一次putbuf结束
void dump_buf_init(u8 *head_buf, int file_toal,void (*putbuf)(void*buf,u32 len), void (*wait)(void));

//dump_dma_buf:长度需要大于或等于 sizeof(tx_buf) + 14, 其中14是包头的长度. tx_buf中的数据会先打包放到dump_dma_buf中待发送
//tx_buf:      导出的数据存放的buf
//tx_buf_len:  导出数据的长度
//file_idx: 文件序号,0表示UartDump收到数据后保存到文件0, 1表示保存到文件1...
void dump_putbuf(void *dump_dma_buf, void *tx_buf, int tx_buf_len, u8 file_idx);
void dump_put2ram(void *dump_dma_buf, void *tx_buf, int tx_buf_len, u8 file_idx);
void dump_dma_kick(void *dma_buf,u32 dma_len);  //kick一次dma发送
void dump_dma_wait(void);  //等待上一次发送完成


#endif // _API_SYS_H_

